package com.iuie.ns.frame.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.iuie.ns.frame.persistence.dao.IGenericDao.MatchType;
import com.iuie.ns.frame.web.dataset.vo.Page;
/**
 * Service基类，并不是必须实现
 * @author lj
 * @createTime 2017年1月12日 上午9:31:22
 * @param <T>
 */
public interface IBaseService<T> {
	
	/**
	 * 查找所有
	 * @createTime 2017年1月19日 上午10:24:57
	 * @return
	 */
	List<T> findAll();
	
	/**
	 * 带查询条件对象的查询
	 * @param obj 查询条件对象
	 * @return
	 */
	List<T> findAll(T obj);
	
	/**
	 * 带查询条件对象和查询条件描述的查询
	 * @param t 条件查询对象
	 * @param map 条件查询描述
	 * @return
	 */
	List<T> findAll(T t, Map<String, MatchType> map);
	
	/**
	 * 分页查询
	 * @param t 查询条件
	 * @param page 分页信息
	 * @return
	 */
	List<T> findByPage(T t, Page page);
	
	/**
	 * 分页查询
	 * @param t 查询条件
	 * @param page 分页信息
	 * @param map 条件查询描述
	 * @return
	 */
	List<T> findByPage(T t, Page page, Map<String, MatchType> map);
	
	/**
	 * 根据id查找
	 * @createTime 2017年1月12日 上午9:31:19
	 * @param id
	 * @return
	 */
	T findById(Serializable id);
	/**
	 * 根据id查找，懒加载
	 * @createTime 2017年1月20日 上午14:15:19
	 * @param id
	 * @return
	 */
	T loadById(Serializable id);
	/**
	 * 新增1个对象
	 * @createTime 2017年1月12日 上午9:31:11
	 * @param one
	 * @return
	 */
	T addOne(T one);
	/**
	 * 根据id删除
	 * @createTime 2017年1月12日 上午9:31:01
	 * @param id
	 */
	void deleteById(Serializable id);
	/**
	 * 删除一个对象
	 * @createTime 2017年1月12日 上午9:30:51
	 * @param one
	 */
	void deleteOne(T one);
	/**
	 * 更新一个对象
	 * @createTime 2017年1月12日 上午9:30:42
	 * @param one
	 */
	void updateOne(T one);
	/**
	 * 修改或保存一个对象
	 * @param one
	 */
	void saveOrUpdate(T one);
}
